<?php

/**
 * Module où sont regroupées toutes les fonctions ajax
 * Histoire de faire ça pas trop mal, les réponses se font suivant le xml expliqué
 * dans le template genSuccess.php. Il est le même pour les différentes fonctions
 * ajax appelées (dans terminal.js)
 *
 * @package    TB
 * @subpackage ajax
 * @author     Marion Duprey
 * @version    SVN: $Id: actions.class.php 12479 2008-10-31 10:54:40Z fabien $
 */
class ajaxActions extends sfActions {

    /*
     * preExecute s'execute avant chaque executeMachin
     */
    public function preExecute() {
    // vérification que c'est bien du post
	$this->forward404Unless($this->getRequest()->getMethod() == "GET");
	// initialisation des deux variables pour mise en forme du xml retour
	$this->m = "";
	$this->r = 0;
    }

    /*
     * postExecute, s'execute après chaque executeMachin
     * appel le template genSuccess et définit le retour comme étant du xml
     */
    public function postExecute() {
	$this->setLayout(false);
	$this->setTemplate("gen");
	$this->getResponse()->setContentType('text/xml');
    }

    /*
     * fonction qui note le TU comme devant se maj
     */
    public function executeAskMaj(sfWebRequest $request) {
    // vérification que le tu existe
	if (! $tu = TuPeer::retrieveByPK($_POST['askmaj']))
	    $this->m = "Erreur : TU inexistant";

	else {
	// vérification que les majs ne sont pas interdites sur le TU
	    if ($tu->getIsMajLocked()) $this->m = "Erreur : Maj lockée";

	    // demande de mise à jour
	    else {
		$tu->setIsMajAsked(true);
		$tu->setVersionDemandee(TuPeer::lastVersion());
		if($tu->save()) {
		    $this->m = "Mise à jour demandée";
		    $this->r = 1;
		}
		else $this->m = "Erreur : Problème lors de l'enregistrement de la modification";
	    }
	}
    }

    /*
     * fonction qui note une enquête comme étant à activer
     */
    public function executeAskEnquete(sfWebRequest $request) {
	// vérification existence TU
	if (! $tu = TuPeer::retrieveByPK($_GET['id_tu']))
	    $this->m = "Erreur : TU inexistant";

	// vérification existence enquete
	elseif (! $enq = EnquetePeer::retrieveByPK($_GET['id_tu'], $_GET['id_enq']))
	    $this->m = "Erreur : Enquête inexistante";

	// demande d'activation de l'enquête
	else {
	    $enq->setIsAsked(true);
	    if ($enq->save()) {
		$this->m = "Activation demandée";
		$this->r = 1;
	    }
	    else $this->m = "Erreur : Problème lors de l'enregistrement de la modification";
	}
	$this->forward("enquetes", "index");

    }

    /*
     * fonction qui note la futur nouvelle valeur d'une option
     */
    public function executeChangeOpt(sfWebRequest $request) {
	// vérification que le tu existe
	// $_POST['id_tu'] pour le tu 1 par exemple sera tu1 donc il faut substr
	if (! $tu = TuPeer::retrieveByPK(substr($_POST['id_tu'], 2)))
	    $this->m = "Erreur : TU inexistant";

	// vérification que l'option existe
	elseif (! $opt = OptPeer::retrieveByPK($_POST['id_opt'], substr($_POST['id_tu'], 2)))
	    $this->m = "Erreur : Option ".$_POST['id_opt']." inexistante";

	// modification du champ value_asked de l'option
	else {
	    $opt->setValueAsked($_POST['val_opt']);
	    if ($opt->save()) {
		$this->m =  "Modification demandée";
		$this->r = 1;
	    }
	    else $this->m = "Erreur : Problème lors de l'enregistrement de la modification";
	}
    }

    /*
     * fonction qui note l'option comme étant à supprimer
     */
    public function executeDeleteOpt(sfWebRequest $request) {
	// test existence tu
	if (! $tu = TuPeer::retrieveByPK(substr($_POST['id_tu'], 2)))
	    $this->m = "Erreur : TU indexistant" ;
	// test existence option
	elseif (! $opt = OptPeer::retrieveByPK($_POST['id_opt'], substr($_POST['id_tu'], 2)))
	    $this->m = "Erreur : Option " . $_POST['id_opt'] . " inexistante";
	    
	else {
	    $opt->setDeleteAsked(true);
	    if($opt->save()) {
		$this->m = "Option nottée à supprimer";
		$this->r = 1;
	    }
	    else $this->m = "Erreur : Problème lors de l'enregistrement de la modification";
	}

    }

    /*
     * fonction qui créé une nouvelle catégorie d'options
     */
    public function executeSupprOpt(sfWebRequest $request) {
	// test existence option
	if ($categ = OptCategPeer::doCount(new Criterion(OptCategPeer, OptCategPeer::NAME, $_POST['name'])) > 0)
	    $this->m = "Erreur : Catégorie " . $_POST['id_opt'] . " existante";

	else {
	    $opt->setDeleteAsked(true);
	    if($opt->save()) {
		$this->m = "Option nottée à supprimer";
		$this->r = 1;
	    }
	    else $this->m = "Erreur : Problème lors de l'enregistrement de la modification";
	}

    }
}
